package main

import (
	"fmt"
	"log"
	"time"
)

func main() {

	//开两个线程,只要有一个线程出异常,main程序就退出,手动捕获则不影响主程序
	go divideNum()

	go printNum()

	time.Sleep(time.Second * 30)
}

func printNum() {
	for i := 0; i < 8; i++ {
		time.Sleep(time.Millisecond * 500)
		fmt.Println(i)
	}
}

func divideNum() {

	// 函数内部的异常处理
	defer func() {
		err := recover()
		if err != nil {
			log.Println("printNum() 执行异常")
		}
	}()

	// todo 可能出错的业务逻辑
	num1 := 10
	num2 := 0
	result := num1 / num2
	fmt.Println("result=", result)
}
